package com.yunke.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yunke.entity.YunkeDistributor;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.math.BigDecimal;
import java.util.List;

/**
 * 分销商 Mapper 接口
 *
 * @author yunke
 * @since 1.0.0
 */
@Mapper
public interface YunkeDistributorMapper extends BaseMapper<YunkeDistributor> {

    /**
     * 根据用户ID查询分销商信息
     *
     * @param userId 用户ID
     * @return 分销商信息
     */
    YunkeDistributor selectByUserId(@Param("userId") Long userId);

    /**
     * 根据邀请码查询分销商信息
     *
     * @param inviteCode 邀请码
     * @return 分销商信息
     */
    YunkeDistributor selectByInviteCode(@Param("inviteCode") String inviteCode);

    /**
     * 分页查询分销商列表
     *
     * @param page 分页参数
     * @param nickname 昵称
     * @param mobile 手机号
     * @param level 等级
     * @param auditStatus 审核状态
     * @param distributorStatus 分销商状态
     * @return 分销商列表
     */
    IPage<YunkeDistributor> selectDistributorPage(
            Page<YunkeDistributor> page,
            @Param("nickname") String nickname,
            @Param("mobile") String mobile,
            @Param("level") Integer level,
            @Param("auditStatus") Integer auditStatus,
            @Param("distributorStatus") Integer distributorStatus
    );

    /**
     * 查询下级分销商列表
     *
     * @param parentId 上级分销商ID
     * @param level 等级
     * @return 下级分销商列表
     */
    List<YunkeDistributor> selectChildDistributors(@Param("parentId") Long parentId, @Param("level") Integer level);

    /**
     * 统计分销商团队人数
     *
     * @param distributorId 分销商ID
     * @return 团队人数
     */
    Integer countTeamMembers(@Param("distributorId") Long distributorId);

    /**
     * 统计分销商直推人数
     *
     * @param distributorId 分销商ID
     * @return 直推人数
     */
    Integer countDirectMembers(@Param("distributorId") Long distributorId);

    /**
     * 更新分销商佣金统计
     *
     * @param distributorId 分销商ID
     * @param commissionAmount 佣金金额
     * @param type 类型（1增加 2减少）
     * @return 更新行数
     */
    int updateCommissionStats(@Param("distributorId") Long distributorId, 
                              @Param("commissionAmount") BigDecimal commissionAmount, 
                              @Param("type") Integer type);

    /**
     * 更新分销商推广统计
     *
     * @param distributorId 分销商ID
     * @param userCount 用户数量
     * @param orderCount 订单数量
     * @return 更新行数
     */
    int updatePromoteStats(@Param("distributorId") Long distributorId, 
                           @Param("userCount") Integer userCount, 
                           @Param("orderCount") Integer orderCount);

    /**
     * 更新分销商月度统计
     *
     * @param distributorId 分销商ID
     * @param monthCommission 月度佣金
     * @param monthInviteCount 月度推广数
     * @return 更新行数
     */
    int updateMonthStats(@Param("distributorId") Long distributorId, 
                         @Param("monthCommission") BigDecimal monthCommission, 
                         @Param("monthInviteCount") Integer monthInviteCount);

    /**
     * 批量重置月度统计
     *
     * @return 更新行数
     */
    int resetMonthStats();
} 